#ifndef __BSP_IIC_H
#define __BSP_IIC_H
#include "stm32f4xx.h"

#define RCC_IIC_CLOCK RCC_AHB1Periph_GPIOB
#define IIC_GPIOx     GPIOB
#define SCL_GPIO_Pin  GPIO_Pin_6
#define SDA_GPIO_Pin  GPIO_Pin_7

// IO操作函数
#define IIC_SCL_High GPIO_SetBits(IIC_GPIOx, SCL_GPIO_Pin)          // SCL
#define IIC_SDA_High GPIO_SetBits(IIC_GPIOx, SDA_GPIO_Pin)          // SDA
#define IIC_SCL_Low  GPIO_ResetBits(IIC_GPIOx, SCL_GPIO_Pin)        // SCL
#define IIC_SDA_Low  GPIO_ResetBits(IIC_GPIOx, SDA_GPIO_Pin)        // SDA
#define READ_SDA     GPIO_ReadInputDataBit(IIC_GPIOx, SDA_GPIO_Pin) // 输入SDA

// IIC所有操作函数
void IIC_Init(void);                // 初始化IIC的IO口
void SDA_OUT(void);                 // SDA输出配置
void SDA_IN(void);                  // SDA输入配置
void IIC_Start(void);               // 发送IIC开始信号
void IIC_Stop(void);                // 发送IIC停止信号
void IIC_Send_Byte(uint8_t txd);    // IIC发送一个字节
uint8_t IIC_Read_Byte(uint8_t ack); // IIC读取一个字节
uint8_t IIC_Wait_Ack(void);         // IIC等待ACK信号
void IIC_Ack(void);                 // IIC发送ACK信号
void IIC_NAck(void);                // IIC不发送ACK信号

#endif